/*
 * Copyright 2021 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/firestore/v1/write.proto

#ifndef GOOGLE_PROTOBUF_INCLUDED_google_2ffirestore_2fv1_2fwrite_2eproto
#define GOOGLE_PROTOBUF_INCLUDED_google_2ffirestore_2fv1_2fwrite_2eproto

#include <limits>
#include <string>

#include <google/protobuf/port_def.inc>
#if PROTOBUF_VERSION < 3011000
#error This file was generated by a newer version of protoc which is
#error incompatible with your Protocol Buffer headers. Please update
#error your headers.
#endif
#if 3011002 < PROTOBUF_MIN_PROTOC_VERSION
#error This file was generated by an older version of protoc which is
#error incompatible with your Protocol Buffer headers. Please
#error regenerate this file with a newer version of protoc.
#endif

#include <google/protobuf/port_undef.inc>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/arena.h>
#include <google/protobuf/arenastring.h>
#include <google/protobuf/generated_message_table_driven.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/inlined_string_field.h>
#include <google/protobuf/metadata.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/message.h>
#include <google/protobuf/repeated_field.h>  // IWYU pragma: export
#include <google/protobuf/extension_set.h>  // IWYU pragma: export
#include <google/protobuf/generated_enum_reflection.h>
#include <google/protobuf/unknown_field_set.h>
#include "google/api/annotations.pb.h"
#include "google/firestore/v1/common.pb.h"
#include "google/firestore/v1/document.pb.h"
#include <google/protobuf/timestamp.pb.h>
// @@protoc_insertion_point(includes)
#include <google/protobuf/port_def.inc>
#define PROTOBUF_INTERNAL_EXPORT_google_2ffirestore_2fv1_2fwrite_2eproto
PROTOBUF_NAMESPACE_OPEN
namespace internal {
class AnyMetadata;
}  // namespace internal
PROTOBUF_NAMESPACE_CLOSE

// Internal implementation detail -- do not use these members.
struct TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto {
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTableField entries[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[8]
    PROTOBUF_SECTION_VARIABLE(protodesc_cold);
  static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
  static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
  static const ::PROTOBUF_NAMESPACE_ID::uint32 offsets[];
};
extern const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto;
namespace google {
namespace firestore {
namespace v1 {
class DocumentChange;
class DocumentChangeDefaultTypeInternal;
extern DocumentChangeDefaultTypeInternal _DocumentChange_default_instance_;
class DocumentDelete;
class DocumentDeleteDefaultTypeInternal;
extern DocumentDeleteDefaultTypeInternal _DocumentDelete_default_instance_;
class DocumentRemove;
class DocumentRemoveDefaultTypeInternal;
extern DocumentRemoveDefaultTypeInternal _DocumentRemove_default_instance_;
class DocumentTransform;
class DocumentTransformDefaultTypeInternal;
extern DocumentTransformDefaultTypeInternal _DocumentTransform_default_instance_;
class DocumentTransform_FieldTransform;
class DocumentTransform_FieldTransformDefaultTypeInternal;
extern DocumentTransform_FieldTransformDefaultTypeInternal _DocumentTransform_FieldTransform_default_instance_;
class ExistenceFilter;
class ExistenceFilterDefaultTypeInternal;
extern ExistenceFilterDefaultTypeInternal _ExistenceFilter_default_instance_;
class Write;
class WriteDefaultTypeInternal;
extern WriteDefaultTypeInternal _Write_default_instance_;
class WriteResult;
class WriteResultDefaultTypeInternal;
extern WriteResultDefaultTypeInternal _WriteResult_default_instance_;
}  // namespace v1
}  // namespace firestore
}  // namespace google
PROTOBUF_NAMESPACE_OPEN
template<> ::google::firestore::v1::DocumentChange* Arena::CreateMaybeMessage<::google::firestore::v1::DocumentChange>(Arena*);
template<> ::google::firestore::v1::DocumentDelete* Arena::CreateMaybeMessage<::google::firestore::v1::DocumentDelete>(Arena*);
template<> ::google::firestore::v1::DocumentRemove* Arena::CreateMaybeMessage<::google::firestore::v1::DocumentRemove>(Arena*);
template<> ::google::firestore::v1::DocumentTransform* Arena::CreateMaybeMessage<::google::firestore::v1::DocumentTransform>(Arena*);
template<> ::google::firestore::v1::DocumentTransform_FieldTransform* Arena::CreateMaybeMessage<::google::firestore::v1::DocumentTransform_FieldTransform>(Arena*);
template<> ::google::firestore::v1::ExistenceFilter* Arena::CreateMaybeMessage<::google::firestore::v1::ExistenceFilter>(Arena*);
template<> ::google::firestore::v1::Write* Arena::CreateMaybeMessage<::google::firestore::v1::Write>(Arena*);
template<> ::google::firestore::v1::WriteResult* Arena::CreateMaybeMessage<::google::firestore::v1::WriteResult>(Arena*);
PROTOBUF_NAMESPACE_CLOSE
namespace google {
namespace firestore {
namespace v1 {

enum DocumentTransform_FieldTransform_ServerValue : int {
  DocumentTransform_FieldTransform_ServerValue_SERVER_VALUE_UNSPECIFIED = 0,
  DocumentTransform_FieldTransform_ServerValue_REQUEST_TIME = 1,
  DocumentTransform_FieldTransform_ServerValue_DocumentTransform_FieldTransform_ServerValue_INT_MIN_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::min(),
  DocumentTransform_FieldTransform_ServerValue_DocumentTransform_FieldTransform_ServerValue_INT_MAX_SENTINEL_DO_NOT_USE_ = std::numeric_limits<::PROTOBUF_NAMESPACE_ID::int32>::max()
};
bool DocumentTransform_FieldTransform_ServerValue_IsValid(int value);
constexpr DocumentTransform_FieldTransform_ServerValue DocumentTransform_FieldTransform_ServerValue_ServerValue_MIN = DocumentTransform_FieldTransform_ServerValue_SERVER_VALUE_UNSPECIFIED;
constexpr DocumentTransform_FieldTransform_ServerValue DocumentTransform_FieldTransform_ServerValue_ServerValue_MAX = DocumentTransform_FieldTransform_ServerValue_REQUEST_TIME;
constexpr int DocumentTransform_FieldTransform_ServerValue_ServerValue_ARRAYSIZE = DocumentTransform_FieldTransform_ServerValue_ServerValue_MAX + 1;

const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* DocumentTransform_FieldTransform_ServerValue_descriptor();
template<typename T>
inline const std::string& DocumentTransform_FieldTransform_ServerValue_Name(T enum_t_value) {
  static_assert(::std::is_same<T, DocumentTransform_FieldTransform_ServerValue>::value ||
    ::std::is_integral<T>::value,
    "Incorrect type passed to function DocumentTransform_FieldTransform_ServerValue_Name.");
  return ::PROTOBUF_NAMESPACE_ID::internal::NameOfEnum(
    DocumentTransform_FieldTransform_ServerValue_descriptor(), enum_t_value);
}
inline bool DocumentTransform_FieldTransform_ServerValue_Parse(
    const std::string& name, DocumentTransform_FieldTransform_ServerValue* value) {
  return ::PROTOBUF_NAMESPACE_ID::internal::ParseNamedEnum<DocumentTransform_FieldTransform_ServerValue>(
    DocumentTransform_FieldTransform_ServerValue_descriptor(), name, value);
}
// ===================================================================

class Write :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1.Write) */ {
 public:
  Write();
  virtual ~Write();

  Write(const Write& from);
  Write(Write&& from) noexcept
    : Write() {
    *this = ::std::move(from);
  }

  inline Write& operator=(const Write& from) {
    CopyFrom(from);
    return *this;
  }
  inline Write& operator=(Write&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const Write& default_instance();

  enum OperationCase {
    kUpdate = 1,
    kDelete = 2,
    kVerify = 5,
    kTransform = 6,
    OPERATION_NOT_SET = 0,
  };

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const Write* internal_default_instance() {
    return reinterpret_cast<const Write*>(
               &_Write_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    0;

  friend void swap(Write& a, Write& b) {
    a.Swap(&b);
  }
  inline void Swap(Write* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline Write* New() const final {
    return CreateMaybeMessage<Write>(nullptr);
  }

  Write* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<Write>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const Write& from);
  void MergeFrom(const Write& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(Write* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "google.firestore.v1.Write";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto);
    return ::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kUpdateTransformsFieldNumber = 7,
    kUpdateMaskFieldNumber = 3,
    kCurrentDocumentFieldNumber = 4,
    kUpdateFieldNumber = 1,
    kDeleteFieldNumber = 2,
    kVerifyFieldNumber = 5,
    kTransformFieldNumber = 6,
  };
  // repeated .google.firestore.v1.DocumentTransform.FieldTransform update_transforms = 7;
  int update_transforms_size() const;
  private:
  int _internal_update_transforms_size() const;
  public:
  void clear_update_transforms();
  ::google::firestore::v1::DocumentTransform_FieldTransform* mutable_update_transforms(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform >*
      mutable_update_transforms();
  private:
  const ::google::firestore::v1::DocumentTransform_FieldTransform& _internal_update_transforms(int index) const;
  ::google::firestore::v1::DocumentTransform_FieldTransform* _internal_add_update_transforms();
  public:
  const ::google::firestore::v1::DocumentTransform_FieldTransform& update_transforms(int index) const;
  ::google::firestore::v1::DocumentTransform_FieldTransform* add_update_transforms();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform >&
      update_transforms() const;

  // .google.firestore.v1.DocumentMask update_mask = 3;
  bool has_update_mask() const;
  private:
  bool _internal_has_update_mask() const;
  public:
  void clear_update_mask();
  const ::google::firestore::v1::DocumentMask& update_mask() const;
  ::google::firestore::v1::DocumentMask* release_update_mask();
  ::google::firestore::v1::DocumentMask* mutable_update_mask();
  void set_allocated_update_mask(::google::firestore::v1::DocumentMask* update_mask);
  private:
  const ::google::firestore::v1::DocumentMask& _internal_update_mask() const;
  ::google::firestore::v1::DocumentMask* _internal_mutable_update_mask();
  public:

  // .google.firestore.v1.Precondition current_document = 4;
  bool has_current_document() const;
  private:
  bool _internal_has_current_document() const;
  public:
  void clear_current_document();
  const ::google::firestore::v1::Precondition& current_document() const;
  ::google::firestore::v1::Precondition* release_current_document();
  ::google::firestore::v1::Precondition* mutable_current_document();
  void set_allocated_current_document(::google::firestore::v1::Precondition* current_document);
  private:
  const ::google::firestore::v1::Precondition& _internal_current_document() const;
  ::google::firestore::v1::Precondition* _internal_mutable_current_document();
  public:

  // .google.firestore.v1.Document update = 1;
  bool has_update() const;
  private:
  bool _internal_has_update() const;
  public:
  void clear_update();
  const ::google::firestore::v1::Document& update() const;
  ::google::firestore::v1::Document* release_update();
  ::google::firestore::v1::Document* mutable_update();
  void set_allocated_update(::google::firestore::v1::Document* update);
  private:
  const ::google::firestore::v1::Document& _internal_update() const;
  ::google::firestore::v1::Document* _internal_mutable_update();
  public:

  // string delete = 2;
  private:
  bool _internal_has_delete_() const;
  public:
  void clear_delete_();
  const std::string& delete_() const;
  void set_delete_(const std::string& value);
  void set_delete_(std::string&& value);
  void set_delete_(const char* value);
  void set_delete_(const char* value, size_t size);
  std::string* mutable_delete_();
  std::string* release_delete_();
  void set_allocated_delete_(std::string* delete_);
  private:
  const std::string& _internal_delete_() const;
  void _internal_set_delete_(const std::string& value);
  std::string* _internal_mutable_delete_();
  public:

  // string verify = 5;
  private:
  bool _internal_has_verify() const;
  public:
  void clear_verify();
  const std::string& verify() const;
  void set_verify(const std::string& value);
  void set_verify(std::string&& value);
  void set_verify(const char* value);
  void set_verify(const char* value, size_t size);
  std::string* mutable_verify();
  std::string* release_verify();
  void set_allocated_verify(std::string* verify);
  private:
  const std::string& _internal_verify() const;
  void _internal_set_verify(const std::string& value);
  std::string* _internal_mutable_verify();
  public:

  // .google.firestore.v1.DocumentTransform transform = 6;
  bool has_transform() const;
  private:
  bool _internal_has_transform() const;
  public:
  void clear_transform();
  const ::google::firestore::v1::DocumentTransform& transform() const;
  ::google::firestore::v1::DocumentTransform* release_transform();
  ::google::firestore::v1::DocumentTransform* mutable_transform();
  void set_allocated_transform(::google::firestore::v1::DocumentTransform* transform);
  private:
  const ::google::firestore::v1::DocumentTransform& _internal_transform() const;
  ::google::firestore::v1::DocumentTransform* _internal_mutable_transform();
  public:

  void clear_operation();
  OperationCase operation_case() const;
  // @@protoc_insertion_point(class_scope:google.firestore.v1.Write)
 private:
  class _Internal;
  void set_has_update();
  void set_has_delete_();
  void set_has_verify();
  void set_has_transform();

  inline bool has_operation() const;
  inline void clear_has_operation();

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform > update_transforms_;
  ::google::firestore::v1::DocumentMask* update_mask_;
  ::google::firestore::v1::Precondition* current_document_;
  union OperationUnion {
    OperationUnion() {}
    ::google::firestore::v1::Document* update_;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr delete__;
    ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr verify_;
    ::google::firestore::v1::DocumentTransform* transform_;
  } operation_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::uint32 _oneof_case_[1];

  friend struct ::TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto;
};
// -------------------------------------------------------------------

class DocumentTransform_FieldTransform :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1.DocumentTransform.FieldTransform) */ {
 public:
  DocumentTransform_FieldTransform();
  virtual ~DocumentTransform_FieldTransform();

  DocumentTransform_FieldTransform(const DocumentTransform_FieldTransform& from);
  DocumentTransform_FieldTransform(DocumentTransform_FieldTransform&& from) noexcept
    : DocumentTransform_FieldTransform() {
    *this = ::std::move(from);
  }

  inline DocumentTransform_FieldTransform& operator=(const DocumentTransform_FieldTransform& from) {
    CopyFrom(from);
    return *this;
  }
  inline DocumentTransform_FieldTransform& operator=(DocumentTransform_FieldTransform&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const DocumentTransform_FieldTransform& default_instance();

  enum TransformTypeCase {
    kSetToServerValue = 2,
    kIncrement = 3,
    kMaximum = 4,
    kMinimum = 5,
    kAppendMissingElements = 6,
    kRemoveAllFromArray = 7,
    TRANSFORM_TYPE_NOT_SET = 0,
  };

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const DocumentTransform_FieldTransform* internal_default_instance() {
    return reinterpret_cast<const DocumentTransform_FieldTransform*>(
               &_DocumentTransform_FieldTransform_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    1;

  friend void swap(DocumentTransform_FieldTransform& a, DocumentTransform_FieldTransform& b) {
    a.Swap(&b);
  }
  inline void Swap(DocumentTransform_FieldTransform* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline DocumentTransform_FieldTransform* New() const final {
    return CreateMaybeMessage<DocumentTransform_FieldTransform>(nullptr);
  }

  DocumentTransform_FieldTransform* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<DocumentTransform_FieldTransform>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const DocumentTransform_FieldTransform& from);
  void MergeFrom(const DocumentTransform_FieldTransform& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(DocumentTransform_FieldTransform* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "google.firestore.v1.DocumentTransform.FieldTransform";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto);
    return ::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  typedef DocumentTransform_FieldTransform_ServerValue ServerValue;
  static constexpr ServerValue SERVER_VALUE_UNSPECIFIED =
    DocumentTransform_FieldTransform_ServerValue_SERVER_VALUE_UNSPECIFIED;
  static constexpr ServerValue REQUEST_TIME =
    DocumentTransform_FieldTransform_ServerValue_REQUEST_TIME;
  static inline bool ServerValue_IsValid(int value) {
    return DocumentTransform_FieldTransform_ServerValue_IsValid(value);
  }
  static constexpr ServerValue ServerValue_MIN =
    DocumentTransform_FieldTransform_ServerValue_ServerValue_MIN;
  static constexpr ServerValue ServerValue_MAX =
    DocumentTransform_FieldTransform_ServerValue_ServerValue_MAX;
  static constexpr int ServerValue_ARRAYSIZE =
    DocumentTransform_FieldTransform_ServerValue_ServerValue_ARRAYSIZE;
  static inline const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor*
  ServerValue_descriptor() {
    return DocumentTransform_FieldTransform_ServerValue_descriptor();
  }
  template<typename T>
  static inline const std::string& ServerValue_Name(T enum_t_value) {
    static_assert(::std::is_same<T, ServerValue>::value ||
      ::std::is_integral<T>::value,
      "Incorrect type passed to function ServerValue_Name.");
    return DocumentTransform_FieldTransform_ServerValue_Name(enum_t_value);
  }
  static inline bool ServerValue_Parse(const std::string& name,
      ServerValue* value) {
    return DocumentTransform_FieldTransform_ServerValue_Parse(name, value);
  }

  // accessors -------------------------------------------------------

  enum : int {
    kFieldPathFieldNumber = 1,
    kSetToServerValueFieldNumber = 2,
    kIncrementFieldNumber = 3,
    kMaximumFieldNumber = 4,
    kMinimumFieldNumber = 5,
    kAppendMissingElementsFieldNumber = 6,
    kRemoveAllFromArrayFieldNumber = 7,
  };
  // string field_path = 1;
  void clear_field_path();
  const std::string& field_path() const;
  void set_field_path(const std::string& value);
  void set_field_path(std::string&& value);
  void set_field_path(const char* value);
  void set_field_path(const char* value, size_t size);
  std::string* mutable_field_path();
  std::string* release_field_path();
  void set_allocated_field_path(std::string* field_path);
  private:
  const std::string& _internal_field_path() const;
  void _internal_set_field_path(const std::string& value);
  std::string* _internal_mutable_field_path();
  public:

  // .google.firestore.v1.DocumentTransform.FieldTransform.ServerValue set_to_server_value = 2;
  private:
  bool _internal_has_set_to_server_value() const;
  public:
  void clear_set_to_server_value();
  ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue set_to_server_value() const;
  void set_set_to_server_value(::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue value);
  private:
  ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue _internal_set_to_server_value() const;
  void _internal_set_set_to_server_value(::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue value);
  public:

  // .google.firestore.v1.Value increment = 3;
  bool has_increment() const;
  private:
  bool _internal_has_increment() const;
  public:
  void clear_increment();
  const ::google::firestore::v1::Value& increment() const;
  ::google::firestore::v1::Value* release_increment();
  ::google::firestore::v1::Value* mutable_increment();
  void set_allocated_increment(::google::firestore::v1::Value* increment);
  private:
  const ::google::firestore::v1::Value& _internal_increment() const;
  ::google::firestore::v1::Value* _internal_mutable_increment();
  public:

  // .google.firestore.v1.Value maximum = 4;
  bool has_maximum() const;
  private:
  bool _internal_has_maximum() const;
  public:
  void clear_maximum();
  const ::google::firestore::v1::Value& maximum() const;
  ::google::firestore::v1::Value* release_maximum();
  ::google::firestore::v1::Value* mutable_maximum();
  void set_allocated_maximum(::google::firestore::v1::Value* maximum);
  private:
  const ::google::firestore::v1::Value& _internal_maximum() const;
  ::google::firestore::v1::Value* _internal_mutable_maximum();
  public:

  // .google.firestore.v1.Value minimum = 5;
  bool has_minimum() const;
  private:
  bool _internal_has_minimum() const;
  public:
  void clear_minimum();
  const ::google::firestore::v1::Value& minimum() const;
  ::google::firestore::v1::Value* release_minimum();
  ::google::firestore::v1::Value* mutable_minimum();
  void set_allocated_minimum(::google::firestore::v1::Value* minimum);
  private:
  const ::google::firestore::v1::Value& _internal_minimum() const;
  ::google::firestore::v1::Value* _internal_mutable_minimum();
  public:

  // .google.firestore.v1.ArrayValue append_missing_elements = 6;
  bool has_append_missing_elements() const;
  private:
  bool _internal_has_append_missing_elements() const;
  public:
  void clear_append_missing_elements();
  const ::google::firestore::v1::ArrayValue& append_missing_elements() const;
  ::google::firestore::v1::ArrayValue* release_append_missing_elements();
  ::google::firestore::v1::ArrayValue* mutable_append_missing_elements();
  void set_allocated_append_missing_elements(::google::firestore::v1::ArrayValue* append_missing_elements);
  private:
  const ::google::firestore::v1::ArrayValue& _internal_append_missing_elements() const;
  ::google::firestore::v1::ArrayValue* _internal_mutable_append_missing_elements();
  public:

  // .google.firestore.v1.ArrayValue remove_all_from_array = 7;
  bool has_remove_all_from_array() const;
  private:
  bool _internal_has_remove_all_from_array() const;
  public:
  void clear_remove_all_from_array();
  const ::google::firestore::v1::ArrayValue& remove_all_from_array() const;
  ::google::firestore::v1::ArrayValue* release_remove_all_from_array();
  ::google::firestore::v1::ArrayValue* mutable_remove_all_from_array();
  void set_allocated_remove_all_from_array(::google::firestore::v1::ArrayValue* remove_all_from_array);
  private:
  const ::google::firestore::v1::ArrayValue& _internal_remove_all_from_array() const;
  ::google::firestore::v1::ArrayValue* _internal_mutable_remove_all_from_array();
  public:

  void clear_transform_type();
  TransformTypeCase transform_type_case() const;
  // @@protoc_insertion_point(class_scope:google.firestore.v1.DocumentTransform.FieldTransform)
 private:
  class _Internal;
  void set_has_set_to_server_value();
  void set_has_increment();
  void set_has_maximum();
  void set_has_minimum();
  void set_has_append_missing_elements();
  void set_has_remove_all_from_array();

  inline bool has_transform_type() const;
  inline void clear_has_transform_type();

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr field_path_;
  union TransformTypeUnion {
    TransformTypeUnion() {}
    int set_to_server_value_;
    ::google::firestore::v1::Value* increment_;
    ::google::firestore::v1::Value* maximum_;
    ::google::firestore::v1::Value* minimum_;
    ::google::firestore::v1::ArrayValue* append_missing_elements_;
    ::google::firestore::v1::ArrayValue* remove_all_from_array_;
  } transform_type_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  ::PROTOBUF_NAMESPACE_ID::uint32 _oneof_case_[1];

  friend struct ::TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto;
};
// -------------------------------------------------------------------

class DocumentTransform :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1.DocumentTransform) */ {
 public:
  DocumentTransform();
  virtual ~DocumentTransform();

  DocumentTransform(const DocumentTransform& from);
  DocumentTransform(DocumentTransform&& from) noexcept
    : DocumentTransform() {
    *this = ::std::move(from);
  }

  inline DocumentTransform& operator=(const DocumentTransform& from) {
    CopyFrom(from);
    return *this;
  }
  inline DocumentTransform& operator=(DocumentTransform&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const DocumentTransform& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const DocumentTransform* internal_default_instance() {
    return reinterpret_cast<const DocumentTransform*>(
               &_DocumentTransform_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    2;

  friend void swap(DocumentTransform& a, DocumentTransform& b) {
    a.Swap(&b);
  }
  inline void Swap(DocumentTransform* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline DocumentTransform* New() const final {
    return CreateMaybeMessage<DocumentTransform>(nullptr);
  }

  DocumentTransform* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<DocumentTransform>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const DocumentTransform& from);
  void MergeFrom(const DocumentTransform& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(DocumentTransform* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "google.firestore.v1.DocumentTransform";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto);
    return ::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  typedef DocumentTransform_FieldTransform FieldTransform;

  // accessors -------------------------------------------------------

  enum : int {
    kFieldTransformsFieldNumber = 2,
    kDocumentFieldNumber = 1,
  };
  // repeated .google.firestore.v1.DocumentTransform.FieldTransform field_transforms = 2;
  int field_transforms_size() const;
  private:
  int _internal_field_transforms_size() const;
  public:
  void clear_field_transforms();
  ::google::firestore::v1::DocumentTransform_FieldTransform* mutable_field_transforms(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform >*
      mutable_field_transforms();
  private:
  const ::google::firestore::v1::DocumentTransform_FieldTransform& _internal_field_transforms(int index) const;
  ::google::firestore::v1::DocumentTransform_FieldTransform* _internal_add_field_transforms();
  public:
  const ::google::firestore::v1::DocumentTransform_FieldTransform& field_transforms(int index) const;
  ::google::firestore::v1::DocumentTransform_FieldTransform* add_field_transforms();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform >&
      field_transforms() const;

  // string document = 1;
  void clear_document();
  const std::string& document() const;
  void set_document(const std::string& value);
  void set_document(std::string&& value);
  void set_document(const char* value);
  void set_document(const char* value, size_t size);
  std::string* mutable_document();
  std::string* release_document();
  void set_allocated_document(std::string* document);
  private:
  const std::string& _internal_document() const;
  void _internal_set_document(const std::string& value);
  std::string* _internal_mutable_document();
  public:

  // @@protoc_insertion_point(class_scope:google.firestore.v1.DocumentTransform)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform > field_transforms_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr document_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto;
};
// -------------------------------------------------------------------

class WriteResult :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1.WriteResult) */ {
 public:
  WriteResult();
  virtual ~WriteResult();

  WriteResult(const WriteResult& from);
  WriteResult(WriteResult&& from) noexcept
    : WriteResult() {
    *this = ::std::move(from);
  }

  inline WriteResult& operator=(const WriteResult& from) {
    CopyFrom(from);
    return *this;
  }
  inline WriteResult& operator=(WriteResult&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const WriteResult& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const WriteResult* internal_default_instance() {
    return reinterpret_cast<const WriteResult*>(
               &_WriteResult_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    3;

  friend void swap(WriteResult& a, WriteResult& b) {
    a.Swap(&b);
  }
  inline void Swap(WriteResult* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline WriteResult* New() const final {
    return CreateMaybeMessage<WriteResult>(nullptr);
  }

  WriteResult* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<WriteResult>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const WriteResult& from);
  void MergeFrom(const WriteResult& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(WriteResult* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "google.firestore.v1.WriteResult";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto);
    return ::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kTransformResultsFieldNumber = 2,
    kUpdateTimeFieldNumber = 1,
  };
  // repeated .google.firestore.v1.Value transform_results = 2;
  int transform_results_size() const;
  private:
  int _internal_transform_results_size() const;
  public:
  void clear_transform_results();
  ::google::firestore::v1::Value* mutable_transform_results(int index);
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::Value >*
      mutable_transform_results();
  private:
  const ::google::firestore::v1::Value& _internal_transform_results(int index) const;
  ::google::firestore::v1::Value* _internal_add_transform_results();
  public:
  const ::google::firestore::v1::Value& transform_results(int index) const;
  ::google::firestore::v1::Value* add_transform_results();
  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::Value >&
      transform_results() const;

  // .google.protobuf.Timestamp update_time = 1;
  bool has_update_time() const;
  private:
  bool _internal_has_update_time() const;
  public:
  void clear_update_time();
  const PROTOBUF_NAMESPACE_ID::Timestamp& update_time() const;
  PROTOBUF_NAMESPACE_ID::Timestamp* release_update_time();
  PROTOBUF_NAMESPACE_ID::Timestamp* mutable_update_time();
  void set_allocated_update_time(PROTOBUF_NAMESPACE_ID::Timestamp* update_time);
  private:
  const PROTOBUF_NAMESPACE_ID::Timestamp& _internal_update_time() const;
  PROTOBUF_NAMESPACE_ID::Timestamp* _internal_mutable_update_time();
  public:

  // @@protoc_insertion_point(class_scope:google.firestore.v1.WriteResult)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::Value > transform_results_;
  PROTOBUF_NAMESPACE_ID::Timestamp* update_time_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto;
};
// -------------------------------------------------------------------

class DocumentChange :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1.DocumentChange) */ {
 public:
  DocumentChange();
  virtual ~DocumentChange();

  DocumentChange(const DocumentChange& from);
  DocumentChange(DocumentChange&& from) noexcept
    : DocumentChange() {
    *this = ::std::move(from);
  }

  inline DocumentChange& operator=(const DocumentChange& from) {
    CopyFrom(from);
    return *this;
  }
  inline DocumentChange& operator=(DocumentChange&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const DocumentChange& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const DocumentChange* internal_default_instance() {
    return reinterpret_cast<const DocumentChange*>(
               &_DocumentChange_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    4;

  friend void swap(DocumentChange& a, DocumentChange& b) {
    a.Swap(&b);
  }
  inline void Swap(DocumentChange* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline DocumentChange* New() const final {
    return CreateMaybeMessage<DocumentChange>(nullptr);
  }

  DocumentChange* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<DocumentChange>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const DocumentChange& from);
  void MergeFrom(const DocumentChange& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(DocumentChange* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "google.firestore.v1.DocumentChange";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto);
    return ::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kTargetIdsFieldNumber = 5,
    kRemovedTargetIdsFieldNumber = 6,
    kDocumentFieldNumber = 1,
  };
  // repeated int32 target_ids = 5;
  int target_ids_size() const;
  private:
  int _internal_target_ids_size() const;
  public:
  void clear_target_ids();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_target_ids(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_target_ids() const;
  void _internal_add_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_target_ids();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 target_ids(int index) const;
  void set_target_ids(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      target_ids() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_target_ids();

  // repeated int32 removed_target_ids = 6;
  int removed_target_ids_size() const;
  private:
  int _internal_removed_target_ids_size() const;
  public:
  void clear_removed_target_ids();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_removed_target_ids(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_removed_target_ids() const;
  void _internal_add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_removed_target_ids();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 removed_target_ids(int index) const;
  void set_removed_target_ids(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      removed_target_ids() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_removed_target_ids();

  // .google.firestore.v1.Document document = 1;
  bool has_document() const;
  private:
  bool _internal_has_document() const;
  public:
  void clear_document();
  const ::google::firestore::v1::Document& document() const;
  ::google::firestore::v1::Document* release_document();
  ::google::firestore::v1::Document* mutable_document();
  void set_allocated_document(::google::firestore::v1::Document* document);
  private:
  const ::google::firestore::v1::Document& _internal_document() const;
  ::google::firestore::v1::Document* _internal_mutable_document();
  public:

  // @@protoc_insertion_point(class_scope:google.firestore.v1.DocumentChange)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > target_ids_;
  mutable std::atomic<int> _target_ids_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > removed_target_ids_;
  mutable std::atomic<int> _removed_target_ids_cached_byte_size_;
  ::google::firestore::v1::Document* document_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto;
};
// -------------------------------------------------------------------

class DocumentDelete :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1.DocumentDelete) */ {
 public:
  DocumentDelete();
  virtual ~DocumentDelete();

  DocumentDelete(const DocumentDelete& from);
  DocumentDelete(DocumentDelete&& from) noexcept
    : DocumentDelete() {
    *this = ::std::move(from);
  }

  inline DocumentDelete& operator=(const DocumentDelete& from) {
    CopyFrom(from);
    return *this;
  }
  inline DocumentDelete& operator=(DocumentDelete&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const DocumentDelete& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const DocumentDelete* internal_default_instance() {
    return reinterpret_cast<const DocumentDelete*>(
               &_DocumentDelete_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    5;

  friend void swap(DocumentDelete& a, DocumentDelete& b) {
    a.Swap(&b);
  }
  inline void Swap(DocumentDelete* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline DocumentDelete* New() const final {
    return CreateMaybeMessage<DocumentDelete>(nullptr);
  }

  DocumentDelete* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<DocumentDelete>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const DocumentDelete& from);
  void MergeFrom(const DocumentDelete& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(DocumentDelete* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "google.firestore.v1.DocumentDelete";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto);
    return ::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kRemovedTargetIdsFieldNumber = 6,
    kDocumentFieldNumber = 1,
    kReadTimeFieldNumber = 4,
  };
  // repeated int32 removed_target_ids = 6;
  int removed_target_ids_size() const;
  private:
  int _internal_removed_target_ids_size() const;
  public:
  void clear_removed_target_ids();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_removed_target_ids(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_removed_target_ids() const;
  void _internal_add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_removed_target_ids();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 removed_target_ids(int index) const;
  void set_removed_target_ids(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      removed_target_ids() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_removed_target_ids();

  // string document = 1;
  void clear_document();
  const std::string& document() const;
  void set_document(const std::string& value);
  void set_document(std::string&& value);
  void set_document(const char* value);
  void set_document(const char* value, size_t size);
  std::string* mutable_document();
  std::string* release_document();
  void set_allocated_document(std::string* document);
  private:
  const std::string& _internal_document() const;
  void _internal_set_document(const std::string& value);
  std::string* _internal_mutable_document();
  public:

  // .google.protobuf.Timestamp read_time = 4;
  bool has_read_time() const;
  private:
  bool _internal_has_read_time() const;
  public:
  void clear_read_time();
  const PROTOBUF_NAMESPACE_ID::Timestamp& read_time() const;
  PROTOBUF_NAMESPACE_ID::Timestamp* release_read_time();
  PROTOBUF_NAMESPACE_ID::Timestamp* mutable_read_time();
  void set_allocated_read_time(PROTOBUF_NAMESPACE_ID::Timestamp* read_time);
  private:
  const PROTOBUF_NAMESPACE_ID::Timestamp& _internal_read_time() const;
  PROTOBUF_NAMESPACE_ID::Timestamp* _internal_mutable_read_time();
  public:

  // @@protoc_insertion_point(class_scope:google.firestore.v1.DocumentDelete)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > removed_target_ids_;
  mutable std::atomic<int> _removed_target_ids_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr document_;
  PROTOBUF_NAMESPACE_ID::Timestamp* read_time_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto;
};
// -------------------------------------------------------------------

class DocumentRemove :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1.DocumentRemove) */ {
 public:
  DocumentRemove();
  virtual ~DocumentRemove();

  DocumentRemove(const DocumentRemove& from);
  DocumentRemove(DocumentRemove&& from) noexcept
    : DocumentRemove() {
    *this = ::std::move(from);
  }

  inline DocumentRemove& operator=(const DocumentRemove& from) {
    CopyFrom(from);
    return *this;
  }
  inline DocumentRemove& operator=(DocumentRemove&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const DocumentRemove& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const DocumentRemove* internal_default_instance() {
    return reinterpret_cast<const DocumentRemove*>(
               &_DocumentRemove_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    6;

  friend void swap(DocumentRemove& a, DocumentRemove& b) {
    a.Swap(&b);
  }
  inline void Swap(DocumentRemove* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline DocumentRemove* New() const final {
    return CreateMaybeMessage<DocumentRemove>(nullptr);
  }

  DocumentRemove* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<DocumentRemove>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const DocumentRemove& from);
  void MergeFrom(const DocumentRemove& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(DocumentRemove* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "google.firestore.v1.DocumentRemove";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto);
    return ::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kRemovedTargetIdsFieldNumber = 2,
    kDocumentFieldNumber = 1,
    kReadTimeFieldNumber = 4,
  };
  // repeated int32 removed_target_ids = 2;
  int removed_target_ids_size() const;
  private:
  int _internal_removed_target_ids_size() const;
  public:
  void clear_removed_target_ids();
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_removed_target_ids(int index) const;
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      _internal_removed_target_ids() const;
  void _internal_add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value);
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      _internal_mutable_removed_target_ids();
  public:
  ::PROTOBUF_NAMESPACE_ID::int32 removed_target_ids(int index) const;
  void set_removed_target_ids(int index, ::PROTOBUF_NAMESPACE_ID::int32 value);
  void add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value);
  const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
      removed_target_ids() const;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
      mutable_removed_target_ids();

  // string document = 1;
  void clear_document();
  const std::string& document() const;
  void set_document(const std::string& value);
  void set_document(std::string&& value);
  void set_document(const char* value);
  void set_document(const char* value, size_t size);
  std::string* mutable_document();
  std::string* release_document();
  void set_allocated_document(std::string* document);
  private:
  const std::string& _internal_document() const;
  void _internal_set_document(const std::string& value);
  std::string* _internal_mutable_document();
  public:

  // .google.protobuf.Timestamp read_time = 4;
  bool has_read_time() const;
  private:
  bool _internal_has_read_time() const;
  public:
  void clear_read_time();
  const PROTOBUF_NAMESPACE_ID::Timestamp& read_time() const;
  PROTOBUF_NAMESPACE_ID::Timestamp* release_read_time();
  PROTOBUF_NAMESPACE_ID::Timestamp* mutable_read_time();
  void set_allocated_read_time(PROTOBUF_NAMESPACE_ID::Timestamp* read_time);
  private:
  const PROTOBUF_NAMESPACE_ID::Timestamp& _internal_read_time() const;
  PROTOBUF_NAMESPACE_ID::Timestamp* _internal_mutable_read_time();
  public:

  // @@protoc_insertion_point(class_scope:google.firestore.v1.DocumentRemove)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 > removed_target_ids_;
  mutable std::atomic<int> _removed_target_ids_cached_byte_size_;
  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr document_;
  PROTOBUF_NAMESPACE_ID::Timestamp* read_time_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto;
};
// -------------------------------------------------------------------

class ExistenceFilter :
    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:google.firestore.v1.ExistenceFilter) */ {
 public:
  ExistenceFilter();
  virtual ~ExistenceFilter();

  ExistenceFilter(const ExistenceFilter& from);
  ExistenceFilter(ExistenceFilter&& from) noexcept
    : ExistenceFilter() {
    *this = ::std::move(from);
  }

  inline ExistenceFilter& operator=(const ExistenceFilter& from) {
    CopyFrom(from);
    return *this;
  }
  inline ExistenceFilter& operator=(ExistenceFilter&& from) noexcept {
    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
      if (this != &from) InternalSwap(&from);
    } else {
      CopyFrom(from);
    }
    return *this;
  }

  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
    return GetDescriptor();
  }
  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
    return GetMetadataStatic().descriptor;
  }
  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
    return GetMetadataStatic().reflection;
  }
  static const ExistenceFilter& default_instance();

  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
  static inline const ExistenceFilter* internal_default_instance() {
    return reinterpret_cast<const ExistenceFilter*>(
               &_ExistenceFilter_default_instance_);
  }
  static constexpr int kIndexInFileMessages =
    7;

  friend void swap(ExistenceFilter& a, ExistenceFilter& b) {
    a.Swap(&b);
  }
  inline void Swap(ExistenceFilter* other) {
    if (other == this) return;
    InternalSwap(other);
  }

  // implements Message ----------------------------------------------

  inline ExistenceFilter* New() const final {
    return CreateMaybeMessage<ExistenceFilter>(nullptr);
  }

  ExistenceFilter* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
    return CreateMaybeMessage<ExistenceFilter>(arena);
  }
  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
  void CopyFrom(const ExistenceFilter& from);
  void MergeFrom(const ExistenceFilter& from);
  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
  bool IsInitialized() const final;

  size_t ByteSizeLong() const final;
  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
  ::PROTOBUF_NAMESPACE_ID::uint8* _InternalSerialize(
      ::PROTOBUF_NAMESPACE_ID::uint8* target, ::PROTOBUF_NAMESPACE_ID::io::EpsCopyOutputStream* stream) const final;
  int GetCachedSize() const final { return _cached_size_.Get(); }

  private:
  inline void SharedCtor();
  inline void SharedDtor();
  void SetCachedSize(int size) const final;
  void InternalSwap(ExistenceFilter* other);
  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
    return "google.firestore.v1.ExistenceFilter";
  }
  private:
  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
    return nullptr;
  }
  inline void* MaybeArenaPtr() const {
    return nullptr;
  }
  public:

  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
  private:
  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto);
    return ::descriptor_table_google_2ffirestore_2fv1_2fwrite_2eproto.file_level_metadata[kIndexInFileMessages];
  }

  public:

  // nested types ----------------------------------------------------

  // accessors -------------------------------------------------------

  enum : int {
    kTargetIdFieldNumber = 1,
    kCountFieldNumber = 2,
  };
  // int32 target_id = 1;
  void clear_target_id();
  ::PROTOBUF_NAMESPACE_ID::int32 target_id() const;
  void set_target_id(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_target_id() const;
  void _internal_set_target_id(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // int32 count = 2;
  void clear_count();
  ::PROTOBUF_NAMESPACE_ID::int32 count() const;
  void set_count(::PROTOBUF_NAMESPACE_ID::int32 value);
  private:
  ::PROTOBUF_NAMESPACE_ID::int32 _internal_count() const;
  void _internal_set_count(::PROTOBUF_NAMESPACE_ID::int32 value);
  public:

  // @@protoc_insertion_point(class_scope:google.firestore.v1.ExistenceFilter)
 private:
  class _Internal;

  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
  ::PROTOBUF_NAMESPACE_ID::int32 target_id_;
  ::PROTOBUF_NAMESPACE_ID::int32 count_;
  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
  friend struct ::TableStruct_google_2ffirestore_2fv1_2fwrite_2eproto;
};
// ===================================================================


// ===================================================================

#ifdef __GNUC__
  #pragma GCC diagnostic push
  #pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif  // __GNUC__
// Write

// .google.firestore.v1.Document update = 1;
inline bool Write::_internal_has_update() const {
  return operation_case() == kUpdate;
}
inline bool Write::has_update() const {
  return _internal_has_update();
}
inline void Write::set_has_update() {
  _oneof_case_[0] = kUpdate;
}
inline ::google::firestore::v1::Document* Write::release_update() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.Write.update)
  if (_internal_has_update()) {
    clear_has_operation();
      ::google::firestore::v1::Document* temp = operation_.update_;
    operation_.update_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::google::firestore::v1::Document& Write::_internal_update() const {
  return _internal_has_update()
      ? *operation_.update_
      : *reinterpret_cast< ::google::firestore::v1::Document*>(&::google::firestore::v1::_Document_default_instance_);
}
inline const ::google::firestore::v1::Document& Write::update() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.Write.update)
  return _internal_update();
}
inline ::google::firestore::v1::Document* Write::_internal_mutable_update() {
  if (!_internal_has_update()) {
    clear_operation();
    set_has_update();
    operation_.update_ = CreateMaybeMessage< ::google::firestore::v1::Document >(
        GetArenaNoVirtual());
  }
  return operation_.update_;
}
inline ::google::firestore::v1::Document* Write::mutable_update() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.Write.update)
  return _internal_mutable_update();
}

// string delete = 2;
inline bool Write::_internal_has_delete_() const {
  return operation_case() == kDelete;
}
inline void Write::set_has_delete_() {
  _oneof_case_[0] = kDelete;
}
inline void Write::clear_delete_() {
  if (_internal_has_delete_()) {
    operation_.delete__.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    clear_has_operation();
  }
}
inline const std::string& Write::delete_() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.Write.delete)
  return _internal_delete_();
}
inline void Write::set_delete_(const std::string& value) {
  _internal_set_delete_(value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.Write.delete)
}
inline std::string* Write::mutable_delete_() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.Write.delete)
  return _internal_mutable_delete_();
}
inline const std::string& Write::_internal_delete_() const {
  if (_internal_has_delete_()) {
    return operation_.delete__.GetNoArena();
  }
  return *&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void Write::_internal_set_delete_(const std::string& value) {
  if (!_internal_has_delete_()) {
    clear_operation();
    set_has_delete_();
    operation_.delete__.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  operation_.delete__.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
}
inline void Write::set_delete_(std::string&& value) {
  // @@protoc_insertion_point(field_set:google.firestore.v1.Write.delete)
  if (!_internal_has_delete_()) {
    clear_operation();
    set_has_delete_();
    operation_.delete__.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  operation_.delete__.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:google.firestore.v1.Write.delete)
}
inline void Write::set_delete_(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  if (!_internal_has_delete_()) {
    clear_operation();
    set_has_delete_();
    operation_.delete__.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  operation_.delete__.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(value));
  // @@protoc_insertion_point(field_set_char:google.firestore.v1.Write.delete)
}
inline void Write::set_delete_(const char* value, size_t size) {
  if (!_internal_has_delete_()) {
    clear_operation();
    set_has_delete_();
    operation_.delete__.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  operation_.delete__.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:google.firestore.v1.Write.delete)
}
inline std::string* Write::_internal_mutable_delete_() {
  if (!_internal_has_delete_()) {
    clear_operation();
    set_has_delete_();
    operation_.delete__.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return operation_.delete__.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* Write::release_delete_() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.Write.delete)
  if (_internal_has_delete_()) {
    clear_has_operation();
    return operation_.delete__.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  } else {
    return nullptr;
  }
}
inline void Write::set_allocated_delete_(std::string* delete_) {
  if (has_operation()) {
    clear_operation();
  }
  if (delete_ != nullptr) {
    set_has_delete_();
    operation_.delete__.UnsafeSetDefault(delete_);
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Write.delete)
}

// string verify = 5;
inline bool Write::_internal_has_verify() const {
  return operation_case() == kVerify;
}
inline void Write::set_has_verify() {
  _oneof_case_[0] = kVerify;
}
inline void Write::clear_verify() {
  if (_internal_has_verify()) {
    operation_.verify_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
    clear_has_operation();
  }
}
inline const std::string& Write::verify() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.Write.verify)
  return _internal_verify();
}
inline void Write::set_verify(const std::string& value) {
  _internal_set_verify(value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.Write.verify)
}
inline std::string* Write::mutable_verify() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.Write.verify)
  return _internal_mutable_verify();
}
inline const std::string& Write::_internal_verify() const {
  if (_internal_has_verify()) {
    return operation_.verify_.GetNoArena();
  }
  return *&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited();
}
inline void Write::_internal_set_verify(const std::string& value) {
  if (!_internal_has_verify()) {
    clear_operation();
    set_has_verify();
    operation_.verify_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  operation_.verify_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
}
inline void Write::set_verify(std::string&& value) {
  // @@protoc_insertion_point(field_set:google.firestore.v1.Write.verify)
  if (!_internal_has_verify()) {
    clear_operation();
    set_has_verify();
    operation_.verify_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  operation_.verify_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:google.firestore.v1.Write.verify)
}
inline void Write::set_verify(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  if (!_internal_has_verify()) {
    clear_operation();
    set_has_verify();
    operation_.verify_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  operation_.verify_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(value));
  // @@protoc_insertion_point(field_set_char:google.firestore.v1.Write.verify)
}
inline void Write::set_verify(const char* value, size_t size) {
  if (!_internal_has_verify()) {
    clear_operation();
    set_has_verify();
    operation_.verify_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  operation_.verify_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(
      reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:google.firestore.v1.Write.verify)
}
inline std::string* Write::_internal_mutable_verify() {
  if (!_internal_has_verify()) {
    clear_operation();
    set_has_verify();
    operation_.verify_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  }
  return operation_.verify_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* Write::release_verify() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.Write.verify)
  if (_internal_has_verify()) {
    clear_has_operation();
    return operation_.verify_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  } else {
    return nullptr;
  }
}
inline void Write::set_allocated_verify(std::string* verify) {
  if (has_operation()) {
    clear_operation();
  }
  if (verify != nullptr) {
    set_has_verify();
    operation_.verify_.UnsafeSetDefault(verify);
  }
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Write.verify)
}

// .google.firestore.v1.DocumentTransform transform = 6;
inline bool Write::_internal_has_transform() const {
  return operation_case() == kTransform;
}
inline bool Write::has_transform() const {
  return _internal_has_transform();
}
inline void Write::set_has_transform() {
  _oneof_case_[0] = kTransform;
}
inline void Write::clear_transform() {
  if (_internal_has_transform()) {
    delete operation_.transform_;
    clear_has_operation();
  }
}
inline ::google::firestore::v1::DocumentTransform* Write::release_transform() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.Write.transform)
  if (_internal_has_transform()) {
    clear_has_operation();
      ::google::firestore::v1::DocumentTransform* temp = operation_.transform_;
    operation_.transform_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::google::firestore::v1::DocumentTransform& Write::_internal_transform() const {
  return _internal_has_transform()
      ? *operation_.transform_
      : *reinterpret_cast< ::google::firestore::v1::DocumentTransform*>(&::google::firestore::v1::_DocumentTransform_default_instance_);
}
inline const ::google::firestore::v1::DocumentTransform& Write::transform() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.Write.transform)
  return _internal_transform();
}
inline ::google::firestore::v1::DocumentTransform* Write::_internal_mutable_transform() {
  if (!_internal_has_transform()) {
    clear_operation();
    set_has_transform();
    operation_.transform_ = CreateMaybeMessage< ::google::firestore::v1::DocumentTransform >(
        GetArenaNoVirtual());
  }
  return operation_.transform_;
}
inline ::google::firestore::v1::DocumentTransform* Write::mutable_transform() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.Write.transform)
  return _internal_mutable_transform();
}

// .google.firestore.v1.DocumentMask update_mask = 3;
inline bool Write::_internal_has_update_mask() const {
  return this != internal_default_instance() && update_mask_ != nullptr;
}
inline bool Write::has_update_mask() const {
  return _internal_has_update_mask();
}
inline const ::google::firestore::v1::DocumentMask& Write::_internal_update_mask() const {
  const ::google::firestore::v1::DocumentMask* p = update_mask_;
  return p != nullptr ? *p : *reinterpret_cast<const ::google::firestore::v1::DocumentMask*>(
      &::google::firestore::v1::_DocumentMask_default_instance_);
}
inline const ::google::firestore::v1::DocumentMask& Write::update_mask() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.Write.update_mask)
  return _internal_update_mask();
}
inline ::google::firestore::v1::DocumentMask* Write::release_update_mask() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.Write.update_mask)
  
  ::google::firestore::v1::DocumentMask* temp = update_mask_;
  update_mask_ = nullptr;
  return temp;
}
inline ::google::firestore::v1::DocumentMask* Write::_internal_mutable_update_mask() {
  
  if (update_mask_ == nullptr) {
    auto* p = CreateMaybeMessage<::google::firestore::v1::DocumentMask>(GetArenaNoVirtual());
    update_mask_ = p;
  }
  return update_mask_;
}
inline ::google::firestore::v1::DocumentMask* Write::mutable_update_mask() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.Write.update_mask)
  return _internal_mutable_update_mask();
}
inline void Write::set_allocated_update_mask(::google::firestore::v1::DocumentMask* update_mask) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(update_mask_);
  }
  if (update_mask) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      update_mask = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, update_mask, submessage_arena);
    }
    
  } else {
    
  }
  update_mask_ = update_mask;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Write.update_mask)
}

// repeated .google.firestore.v1.DocumentTransform.FieldTransform update_transforms = 7;
inline int Write::_internal_update_transforms_size() const {
  return update_transforms_.size();
}
inline int Write::update_transforms_size() const {
  return _internal_update_transforms_size();
}
inline void Write::clear_update_transforms() {
  update_transforms_.Clear();
}
inline ::google::firestore::v1::DocumentTransform_FieldTransform* Write::mutable_update_transforms(int index) {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.Write.update_transforms)
  return update_transforms_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform >*
Write::mutable_update_transforms() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1.Write.update_transforms)
  return &update_transforms_;
}
inline const ::google::firestore::v1::DocumentTransform_FieldTransform& Write::_internal_update_transforms(int index) const {
  return update_transforms_.Get(index);
}
inline const ::google::firestore::v1::DocumentTransform_FieldTransform& Write::update_transforms(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.Write.update_transforms)
  return _internal_update_transforms(index);
}
inline ::google::firestore::v1::DocumentTransform_FieldTransform* Write::_internal_add_update_transforms() {
  return update_transforms_.Add();
}
inline ::google::firestore::v1::DocumentTransform_FieldTransform* Write::add_update_transforms() {
  // @@protoc_insertion_point(field_add:google.firestore.v1.Write.update_transforms)
  return _internal_add_update_transforms();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform >&
Write::update_transforms() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1.Write.update_transforms)
  return update_transforms_;
}

// .google.firestore.v1.Precondition current_document = 4;
inline bool Write::_internal_has_current_document() const {
  return this != internal_default_instance() && current_document_ != nullptr;
}
inline bool Write::has_current_document() const {
  return _internal_has_current_document();
}
inline const ::google::firestore::v1::Precondition& Write::_internal_current_document() const {
  const ::google::firestore::v1::Precondition* p = current_document_;
  return p != nullptr ? *p : *reinterpret_cast<const ::google::firestore::v1::Precondition*>(
      &::google::firestore::v1::_Precondition_default_instance_);
}
inline const ::google::firestore::v1::Precondition& Write::current_document() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.Write.current_document)
  return _internal_current_document();
}
inline ::google::firestore::v1::Precondition* Write::release_current_document() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.Write.current_document)
  
  ::google::firestore::v1::Precondition* temp = current_document_;
  current_document_ = nullptr;
  return temp;
}
inline ::google::firestore::v1::Precondition* Write::_internal_mutable_current_document() {
  
  if (current_document_ == nullptr) {
    auto* p = CreateMaybeMessage<::google::firestore::v1::Precondition>(GetArenaNoVirtual());
    current_document_ = p;
  }
  return current_document_;
}
inline ::google::firestore::v1::Precondition* Write::mutable_current_document() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.Write.current_document)
  return _internal_mutable_current_document();
}
inline void Write::set_allocated_current_document(::google::firestore::v1::Precondition* current_document) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(current_document_);
  }
  if (current_document) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      current_document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, current_document, submessage_arena);
    }
    
  } else {
    
  }
  current_document_ = current_document;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.Write.current_document)
}

inline bool Write::has_operation() const {
  return operation_case() != OPERATION_NOT_SET;
}
inline void Write::clear_has_operation() {
  _oneof_case_[0] = OPERATION_NOT_SET;
}
inline Write::OperationCase Write::operation_case() const {
  return Write::OperationCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// DocumentTransform_FieldTransform

// string field_path = 1;
inline void DocumentTransform_FieldTransform::clear_field_path() {
  field_path_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& DocumentTransform_FieldTransform::field_path() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.FieldTransform.field_path)
  return _internal_field_path();
}
inline void DocumentTransform_FieldTransform::set_field_path(const std::string& value) {
  _internal_set_field_path(value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentTransform.FieldTransform.field_path)
}
inline std::string* DocumentTransform_FieldTransform::mutable_field_path() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentTransform.FieldTransform.field_path)
  return _internal_mutable_field_path();
}
inline const std::string& DocumentTransform_FieldTransform::_internal_field_path() const {
  return field_path_.GetNoArena();
}
inline void DocumentTransform_FieldTransform::_internal_set_field_path(const std::string& value) {
  
  field_path_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
}
inline void DocumentTransform_FieldTransform::set_field_path(std::string&& value) {
  
  field_path_.SetNoArena(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:google.firestore.v1.DocumentTransform.FieldTransform.field_path)
}
inline void DocumentTransform_FieldTransform::set_field_path(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  field_path_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:google.firestore.v1.DocumentTransform.FieldTransform.field_path)
}
inline void DocumentTransform_FieldTransform::set_field_path(const char* value, size_t size) {
  
  field_path_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:google.firestore.v1.DocumentTransform.FieldTransform.field_path)
}
inline std::string* DocumentTransform_FieldTransform::_internal_mutable_field_path() {
  
  return field_path_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* DocumentTransform_FieldTransform::release_field_path() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentTransform.FieldTransform.field_path)
  
  return field_path_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void DocumentTransform_FieldTransform::set_allocated_field_path(std::string* field_path) {
  if (field_path != nullptr) {
    
  } else {
    
  }
  field_path_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), field_path);
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.DocumentTransform.FieldTransform.field_path)
}

// .google.firestore.v1.DocumentTransform.FieldTransform.ServerValue set_to_server_value = 2;
inline bool DocumentTransform_FieldTransform::_internal_has_set_to_server_value() const {
  return transform_type_case() == kSetToServerValue;
}
inline void DocumentTransform_FieldTransform::set_has_set_to_server_value() {
  _oneof_case_[0] = kSetToServerValue;
}
inline void DocumentTransform_FieldTransform::clear_set_to_server_value() {
  if (_internal_has_set_to_server_value()) {
    transform_type_.set_to_server_value_ = 0;
    clear_has_transform_type();
  }
}
inline ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue DocumentTransform_FieldTransform::_internal_set_to_server_value() const {
  if (_internal_has_set_to_server_value()) {
    return static_cast< ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue >(transform_type_.set_to_server_value_);
  }
  return static_cast< ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue >(0);
}
inline ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue DocumentTransform_FieldTransform::set_to_server_value() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.FieldTransform.set_to_server_value)
  return _internal_set_to_server_value();
}
inline void DocumentTransform_FieldTransform::_internal_set_set_to_server_value(::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue value) {
  if (!_internal_has_set_to_server_value()) {
    clear_transform_type();
    set_has_set_to_server_value();
  }
  transform_type_.set_to_server_value_ = value;
}
inline void DocumentTransform_FieldTransform::set_set_to_server_value(::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue value) {
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentTransform.FieldTransform.set_to_server_value)
  _internal_set_set_to_server_value(value);
}

// .google.firestore.v1.Value increment = 3;
inline bool DocumentTransform_FieldTransform::_internal_has_increment() const {
  return transform_type_case() == kIncrement;
}
inline bool DocumentTransform_FieldTransform::has_increment() const {
  return _internal_has_increment();
}
inline void DocumentTransform_FieldTransform::set_has_increment() {
  _oneof_case_[0] = kIncrement;
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::release_increment() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentTransform.FieldTransform.increment)
  if (_internal_has_increment()) {
    clear_has_transform_type();
      ::google::firestore::v1::Value* temp = transform_type_.increment_;
    transform_type_.increment_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::google::firestore::v1::Value& DocumentTransform_FieldTransform::_internal_increment() const {
  return _internal_has_increment()
      ? *transform_type_.increment_
      : *reinterpret_cast< ::google::firestore::v1::Value*>(&::google::firestore::v1::_Value_default_instance_);
}
inline const ::google::firestore::v1::Value& DocumentTransform_FieldTransform::increment() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.FieldTransform.increment)
  return _internal_increment();
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::_internal_mutable_increment() {
  if (!_internal_has_increment()) {
    clear_transform_type();
    set_has_increment();
    transform_type_.increment_ = CreateMaybeMessage< ::google::firestore::v1::Value >(
        GetArenaNoVirtual());
  }
  return transform_type_.increment_;
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::mutable_increment() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentTransform.FieldTransform.increment)
  return _internal_mutable_increment();
}

// .google.firestore.v1.Value maximum = 4;
inline bool DocumentTransform_FieldTransform::_internal_has_maximum() const {
  return transform_type_case() == kMaximum;
}
inline bool DocumentTransform_FieldTransform::has_maximum() const {
  return _internal_has_maximum();
}
inline void DocumentTransform_FieldTransform::set_has_maximum() {
  _oneof_case_[0] = kMaximum;
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::release_maximum() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentTransform.FieldTransform.maximum)
  if (_internal_has_maximum()) {
    clear_has_transform_type();
      ::google::firestore::v1::Value* temp = transform_type_.maximum_;
    transform_type_.maximum_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::google::firestore::v1::Value& DocumentTransform_FieldTransform::_internal_maximum() const {
  return _internal_has_maximum()
      ? *transform_type_.maximum_
      : *reinterpret_cast< ::google::firestore::v1::Value*>(&::google::firestore::v1::_Value_default_instance_);
}
inline const ::google::firestore::v1::Value& DocumentTransform_FieldTransform::maximum() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.FieldTransform.maximum)
  return _internal_maximum();
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::_internal_mutable_maximum() {
  if (!_internal_has_maximum()) {
    clear_transform_type();
    set_has_maximum();
    transform_type_.maximum_ = CreateMaybeMessage< ::google::firestore::v1::Value >(
        GetArenaNoVirtual());
  }
  return transform_type_.maximum_;
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::mutable_maximum() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentTransform.FieldTransform.maximum)
  return _internal_mutable_maximum();
}

// .google.firestore.v1.Value minimum = 5;
inline bool DocumentTransform_FieldTransform::_internal_has_minimum() const {
  return transform_type_case() == kMinimum;
}
inline bool DocumentTransform_FieldTransform::has_minimum() const {
  return _internal_has_minimum();
}
inline void DocumentTransform_FieldTransform::set_has_minimum() {
  _oneof_case_[0] = kMinimum;
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::release_minimum() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentTransform.FieldTransform.minimum)
  if (_internal_has_minimum()) {
    clear_has_transform_type();
      ::google::firestore::v1::Value* temp = transform_type_.minimum_;
    transform_type_.minimum_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::google::firestore::v1::Value& DocumentTransform_FieldTransform::_internal_minimum() const {
  return _internal_has_minimum()
      ? *transform_type_.minimum_
      : *reinterpret_cast< ::google::firestore::v1::Value*>(&::google::firestore::v1::_Value_default_instance_);
}
inline const ::google::firestore::v1::Value& DocumentTransform_FieldTransform::minimum() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.FieldTransform.minimum)
  return _internal_minimum();
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::_internal_mutable_minimum() {
  if (!_internal_has_minimum()) {
    clear_transform_type();
    set_has_minimum();
    transform_type_.minimum_ = CreateMaybeMessage< ::google::firestore::v1::Value >(
        GetArenaNoVirtual());
  }
  return transform_type_.minimum_;
}
inline ::google::firestore::v1::Value* DocumentTransform_FieldTransform::mutable_minimum() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentTransform.FieldTransform.minimum)
  return _internal_mutable_minimum();
}

// .google.firestore.v1.ArrayValue append_missing_elements = 6;
inline bool DocumentTransform_FieldTransform::_internal_has_append_missing_elements() const {
  return transform_type_case() == kAppendMissingElements;
}
inline bool DocumentTransform_FieldTransform::has_append_missing_elements() const {
  return _internal_has_append_missing_elements();
}
inline void DocumentTransform_FieldTransform::set_has_append_missing_elements() {
  _oneof_case_[0] = kAppendMissingElements;
}
inline ::google::firestore::v1::ArrayValue* DocumentTransform_FieldTransform::release_append_missing_elements() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentTransform.FieldTransform.append_missing_elements)
  if (_internal_has_append_missing_elements()) {
    clear_has_transform_type();
      ::google::firestore::v1::ArrayValue* temp = transform_type_.append_missing_elements_;
    transform_type_.append_missing_elements_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::google::firestore::v1::ArrayValue& DocumentTransform_FieldTransform::_internal_append_missing_elements() const {
  return _internal_has_append_missing_elements()
      ? *transform_type_.append_missing_elements_
      : *reinterpret_cast< ::google::firestore::v1::ArrayValue*>(&::google::firestore::v1::_ArrayValue_default_instance_);
}
inline const ::google::firestore::v1::ArrayValue& DocumentTransform_FieldTransform::append_missing_elements() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.FieldTransform.append_missing_elements)
  return _internal_append_missing_elements();
}
inline ::google::firestore::v1::ArrayValue* DocumentTransform_FieldTransform::_internal_mutable_append_missing_elements() {
  if (!_internal_has_append_missing_elements()) {
    clear_transform_type();
    set_has_append_missing_elements();
    transform_type_.append_missing_elements_ = CreateMaybeMessage< ::google::firestore::v1::ArrayValue >(
        GetArenaNoVirtual());
  }
  return transform_type_.append_missing_elements_;
}
inline ::google::firestore::v1::ArrayValue* DocumentTransform_FieldTransform::mutable_append_missing_elements() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentTransform.FieldTransform.append_missing_elements)
  return _internal_mutable_append_missing_elements();
}

// .google.firestore.v1.ArrayValue remove_all_from_array = 7;
inline bool DocumentTransform_FieldTransform::_internal_has_remove_all_from_array() const {
  return transform_type_case() == kRemoveAllFromArray;
}
inline bool DocumentTransform_FieldTransform::has_remove_all_from_array() const {
  return _internal_has_remove_all_from_array();
}
inline void DocumentTransform_FieldTransform::set_has_remove_all_from_array() {
  _oneof_case_[0] = kRemoveAllFromArray;
}
inline ::google::firestore::v1::ArrayValue* DocumentTransform_FieldTransform::release_remove_all_from_array() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentTransform.FieldTransform.remove_all_from_array)
  if (_internal_has_remove_all_from_array()) {
    clear_has_transform_type();
      ::google::firestore::v1::ArrayValue* temp = transform_type_.remove_all_from_array_;
    transform_type_.remove_all_from_array_ = nullptr;
    return temp;
  } else {
    return nullptr;
  }
}
inline const ::google::firestore::v1::ArrayValue& DocumentTransform_FieldTransform::_internal_remove_all_from_array() const {
  return _internal_has_remove_all_from_array()
      ? *transform_type_.remove_all_from_array_
      : *reinterpret_cast< ::google::firestore::v1::ArrayValue*>(&::google::firestore::v1::_ArrayValue_default_instance_);
}
inline const ::google::firestore::v1::ArrayValue& DocumentTransform_FieldTransform::remove_all_from_array() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.FieldTransform.remove_all_from_array)
  return _internal_remove_all_from_array();
}
inline ::google::firestore::v1::ArrayValue* DocumentTransform_FieldTransform::_internal_mutable_remove_all_from_array() {
  if (!_internal_has_remove_all_from_array()) {
    clear_transform_type();
    set_has_remove_all_from_array();
    transform_type_.remove_all_from_array_ = CreateMaybeMessage< ::google::firestore::v1::ArrayValue >(
        GetArenaNoVirtual());
  }
  return transform_type_.remove_all_from_array_;
}
inline ::google::firestore::v1::ArrayValue* DocumentTransform_FieldTransform::mutable_remove_all_from_array() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentTransform.FieldTransform.remove_all_from_array)
  return _internal_mutable_remove_all_from_array();
}

inline bool DocumentTransform_FieldTransform::has_transform_type() const {
  return transform_type_case() != TRANSFORM_TYPE_NOT_SET;
}
inline void DocumentTransform_FieldTransform::clear_has_transform_type() {
  _oneof_case_[0] = TRANSFORM_TYPE_NOT_SET;
}
inline DocumentTransform_FieldTransform::TransformTypeCase DocumentTransform_FieldTransform::transform_type_case() const {
  return DocumentTransform_FieldTransform::TransformTypeCase(_oneof_case_[0]);
}
// -------------------------------------------------------------------

// DocumentTransform

// string document = 1;
inline void DocumentTransform::clear_document() {
  document_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& DocumentTransform::document() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.document)
  return _internal_document();
}
inline void DocumentTransform::set_document(const std::string& value) {
  _internal_set_document(value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentTransform.document)
}
inline std::string* DocumentTransform::mutable_document() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentTransform.document)
  return _internal_mutable_document();
}
inline const std::string& DocumentTransform::_internal_document() const {
  return document_.GetNoArena();
}
inline void DocumentTransform::_internal_set_document(const std::string& value) {
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
}
inline void DocumentTransform::set_document(std::string&& value) {
  
  document_.SetNoArena(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:google.firestore.v1.DocumentTransform.document)
}
inline void DocumentTransform::set_document(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:google.firestore.v1.DocumentTransform.document)
}
inline void DocumentTransform::set_document(const char* value, size_t size) {
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:google.firestore.v1.DocumentTransform.document)
}
inline std::string* DocumentTransform::_internal_mutable_document() {
  
  return document_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* DocumentTransform::release_document() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentTransform.document)
  
  return document_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void DocumentTransform::set_allocated_document(std::string* document) {
  if (document != nullptr) {
    
  } else {
    
  }
  document_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), document);
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.DocumentTransform.document)
}

// repeated .google.firestore.v1.DocumentTransform.FieldTransform field_transforms = 2;
inline int DocumentTransform::_internal_field_transforms_size() const {
  return field_transforms_.size();
}
inline int DocumentTransform::field_transforms_size() const {
  return _internal_field_transforms_size();
}
inline void DocumentTransform::clear_field_transforms() {
  field_transforms_.Clear();
}
inline ::google::firestore::v1::DocumentTransform_FieldTransform* DocumentTransform::mutable_field_transforms(int index) {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentTransform.field_transforms)
  return field_transforms_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform >*
DocumentTransform::mutable_field_transforms() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1.DocumentTransform.field_transforms)
  return &field_transforms_;
}
inline const ::google::firestore::v1::DocumentTransform_FieldTransform& DocumentTransform::_internal_field_transforms(int index) const {
  return field_transforms_.Get(index);
}
inline const ::google::firestore::v1::DocumentTransform_FieldTransform& DocumentTransform::field_transforms(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentTransform.field_transforms)
  return _internal_field_transforms(index);
}
inline ::google::firestore::v1::DocumentTransform_FieldTransform* DocumentTransform::_internal_add_field_transforms() {
  return field_transforms_.Add();
}
inline ::google::firestore::v1::DocumentTransform_FieldTransform* DocumentTransform::add_field_transforms() {
  // @@protoc_insertion_point(field_add:google.firestore.v1.DocumentTransform.field_transforms)
  return _internal_add_field_transforms();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::DocumentTransform_FieldTransform >&
DocumentTransform::field_transforms() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1.DocumentTransform.field_transforms)
  return field_transforms_;
}

// -------------------------------------------------------------------

// WriteResult

// .google.protobuf.Timestamp update_time = 1;
inline bool WriteResult::_internal_has_update_time() const {
  return this != internal_default_instance() && update_time_ != nullptr;
}
inline bool WriteResult::has_update_time() const {
  return _internal_has_update_time();
}
inline const PROTOBUF_NAMESPACE_ID::Timestamp& WriteResult::_internal_update_time() const {
  const PROTOBUF_NAMESPACE_ID::Timestamp* p = update_time_;
  return p != nullptr ? *p : *reinterpret_cast<const PROTOBUF_NAMESPACE_ID::Timestamp*>(
      &PROTOBUF_NAMESPACE_ID::_Timestamp_default_instance_);
}
inline const PROTOBUF_NAMESPACE_ID::Timestamp& WriteResult::update_time() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.WriteResult.update_time)
  return _internal_update_time();
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* WriteResult::release_update_time() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.WriteResult.update_time)
  
  PROTOBUF_NAMESPACE_ID::Timestamp* temp = update_time_;
  update_time_ = nullptr;
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* WriteResult::_internal_mutable_update_time() {
  
  if (update_time_ == nullptr) {
    auto* p = CreateMaybeMessage<PROTOBUF_NAMESPACE_ID::Timestamp>(GetArenaNoVirtual());
    update_time_ = p;
  }
  return update_time_;
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* WriteResult::mutable_update_time() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.WriteResult.update_time)
  return _internal_mutable_update_time();
}
inline void WriteResult::set_allocated_update_time(PROTOBUF_NAMESPACE_ID::Timestamp* update_time) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(update_time_);
  }
  if (update_time) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(update_time)->GetArena();
    if (message_arena != submessage_arena) {
      update_time = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, update_time, submessage_arena);
    }
    
  } else {
    
  }
  update_time_ = update_time;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.WriteResult.update_time)
}

// repeated .google.firestore.v1.Value transform_results = 2;
inline int WriteResult::_internal_transform_results_size() const {
  return transform_results_.size();
}
inline int WriteResult::transform_results_size() const {
  return _internal_transform_results_size();
}
inline ::google::firestore::v1::Value* WriteResult::mutable_transform_results(int index) {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.WriteResult.transform_results)
  return transform_results_.Mutable(index);
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::Value >*
WriteResult::mutable_transform_results() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1.WriteResult.transform_results)
  return &transform_results_;
}
inline const ::google::firestore::v1::Value& WriteResult::_internal_transform_results(int index) const {
  return transform_results_.Get(index);
}
inline const ::google::firestore::v1::Value& WriteResult::transform_results(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.WriteResult.transform_results)
  return _internal_transform_results(index);
}
inline ::google::firestore::v1::Value* WriteResult::_internal_add_transform_results() {
  return transform_results_.Add();
}
inline ::google::firestore::v1::Value* WriteResult::add_transform_results() {
  // @@protoc_insertion_point(field_add:google.firestore.v1.WriteResult.transform_results)
  return _internal_add_transform_results();
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::google::firestore::v1::Value >&
WriteResult::transform_results() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1.WriteResult.transform_results)
  return transform_results_;
}

// -------------------------------------------------------------------

// DocumentChange

// .google.firestore.v1.Document document = 1;
inline bool DocumentChange::_internal_has_document() const {
  return this != internal_default_instance() && document_ != nullptr;
}
inline bool DocumentChange::has_document() const {
  return _internal_has_document();
}
inline const ::google::firestore::v1::Document& DocumentChange::_internal_document() const {
  const ::google::firestore::v1::Document* p = document_;
  return p != nullptr ? *p : *reinterpret_cast<const ::google::firestore::v1::Document*>(
      &::google::firestore::v1::_Document_default_instance_);
}
inline const ::google::firestore::v1::Document& DocumentChange::document() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentChange.document)
  return _internal_document();
}
inline ::google::firestore::v1::Document* DocumentChange::release_document() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentChange.document)
  
  ::google::firestore::v1::Document* temp = document_;
  document_ = nullptr;
  return temp;
}
inline ::google::firestore::v1::Document* DocumentChange::_internal_mutable_document() {
  
  if (document_ == nullptr) {
    auto* p = CreateMaybeMessage<::google::firestore::v1::Document>(GetArenaNoVirtual());
    document_ = p;
  }
  return document_;
}
inline ::google::firestore::v1::Document* DocumentChange::mutable_document() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentChange.document)
  return _internal_mutable_document();
}
inline void DocumentChange::set_allocated_document(::google::firestore::v1::Document* document) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(document_);
  }
  if (document) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
    if (message_arena != submessage_arena) {
      document = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, document, submessage_arena);
    }
    
  } else {
    
  }
  document_ = document;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.DocumentChange.document)
}

// repeated int32 target_ids = 5;
inline int DocumentChange::_internal_target_ids_size() const {
  return target_ids_.size();
}
inline int DocumentChange::target_ids_size() const {
  return _internal_target_ids_size();
}
inline void DocumentChange::clear_target_ids() {
  target_ids_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DocumentChange::_internal_target_ids(int index) const {
  return target_ids_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DocumentChange::target_ids(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentChange.target_ids)
  return _internal_target_ids(index);
}
inline void DocumentChange::set_target_ids(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  target_ids_.Set(index, value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentChange.target_ids)
}
inline void DocumentChange::_internal_add_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value) {
  target_ids_.Add(value);
}
inline void DocumentChange::add_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_target_ids(value);
  // @@protoc_insertion_point(field_add:google.firestore.v1.DocumentChange.target_ids)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DocumentChange::_internal_target_ids() const {
  return target_ids_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DocumentChange::target_ids() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1.DocumentChange.target_ids)
  return _internal_target_ids();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DocumentChange::_internal_mutable_target_ids() {
  return &target_ids_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DocumentChange::mutable_target_ids() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1.DocumentChange.target_ids)
  return _internal_mutable_target_ids();
}

// repeated int32 removed_target_ids = 6;
inline int DocumentChange::_internal_removed_target_ids_size() const {
  return removed_target_ids_.size();
}
inline int DocumentChange::removed_target_ids_size() const {
  return _internal_removed_target_ids_size();
}
inline void DocumentChange::clear_removed_target_ids() {
  removed_target_ids_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DocumentChange::_internal_removed_target_ids(int index) const {
  return removed_target_ids_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DocumentChange::removed_target_ids(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentChange.removed_target_ids)
  return _internal_removed_target_ids(index);
}
inline void DocumentChange::set_removed_target_ids(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  removed_target_ids_.Set(index, value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentChange.removed_target_ids)
}
inline void DocumentChange::_internal_add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value) {
  removed_target_ids_.Add(value);
}
inline void DocumentChange::add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_removed_target_ids(value);
  // @@protoc_insertion_point(field_add:google.firestore.v1.DocumentChange.removed_target_ids)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DocumentChange::_internal_removed_target_ids() const {
  return removed_target_ids_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DocumentChange::removed_target_ids() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1.DocumentChange.removed_target_ids)
  return _internal_removed_target_ids();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DocumentChange::_internal_mutable_removed_target_ids() {
  return &removed_target_ids_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DocumentChange::mutable_removed_target_ids() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1.DocumentChange.removed_target_ids)
  return _internal_mutable_removed_target_ids();
}

// -------------------------------------------------------------------

// DocumentDelete

// string document = 1;
inline void DocumentDelete::clear_document() {
  document_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& DocumentDelete::document() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentDelete.document)
  return _internal_document();
}
inline void DocumentDelete::set_document(const std::string& value) {
  _internal_set_document(value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentDelete.document)
}
inline std::string* DocumentDelete::mutable_document() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentDelete.document)
  return _internal_mutable_document();
}
inline const std::string& DocumentDelete::_internal_document() const {
  return document_.GetNoArena();
}
inline void DocumentDelete::_internal_set_document(const std::string& value) {
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
}
inline void DocumentDelete::set_document(std::string&& value) {
  
  document_.SetNoArena(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:google.firestore.v1.DocumentDelete.document)
}
inline void DocumentDelete::set_document(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:google.firestore.v1.DocumentDelete.document)
}
inline void DocumentDelete::set_document(const char* value, size_t size) {
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:google.firestore.v1.DocumentDelete.document)
}
inline std::string* DocumentDelete::_internal_mutable_document() {
  
  return document_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* DocumentDelete::release_document() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentDelete.document)
  
  return document_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void DocumentDelete::set_allocated_document(std::string* document) {
  if (document != nullptr) {
    
  } else {
    
  }
  document_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), document);
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.DocumentDelete.document)
}

// repeated int32 removed_target_ids = 6;
inline int DocumentDelete::_internal_removed_target_ids_size() const {
  return removed_target_ids_.size();
}
inline int DocumentDelete::removed_target_ids_size() const {
  return _internal_removed_target_ids_size();
}
inline void DocumentDelete::clear_removed_target_ids() {
  removed_target_ids_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DocumentDelete::_internal_removed_target_ids(int index) const {
  return removed_target_ids_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DocumentDelete::removed_target_ids(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentDelete.removed_target_ids)
  return _internal_removed_target_ids(index);
}
inline void DocumentDelete::set_removed_target_ids(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  removed_target_ids_.Set(index, value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentDelete.removed_target_ids)
}
inline void DocumentDelete::_internal_add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value) {
  removed_target_ids_.Add(value);
}
inline void DocumentDelete::add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_removed_target_ids(value);
  // @@protoc_insertion_point(field_add:google.firestore.v1.DocumentDelete.removed_target_ids)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DocumentDelete::_internal_removed_target_ids() const {
  return removed_target_ids_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DocumentDelete::removed_target_ids() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1.DocumentDelete.removed_target_ids)
  return _internal_removed_target_ids();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DocumentDelete::_internal_mutable_removed_target_ids() {
  return &removed_target_ids_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DocumentDelete::mutable_removed_target_ids() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1.DocumentDelete.removed_target_ids)
  return _internal_mutable_removed_target_ids();
}

// .google.protobuf.Timestamp read_time = 4;
inline bool DocumentDelete::_internal_has_read_time() const {
  return this != internal_default_instance() && read_time_ != nullptr;
}
inline bool DocumentDelete::has_read_time() const {
  return _internal_has_read_time();
}
inline const PROTOBUF_NAMESPACE_ID::Timestamp& DocumentDelete::_internal_read_time() const {
  const PROTOBUF_NAMESPACE_ID::Timestamp* p = read_time_;
  return p != nullptr ? *p : *reinterpret_cast<const PROTOBUF_NAMESPACE_ID::Timestamp*>(
      &PROTOBUF_NAMESPACE_ID::_Timestamp_default_instance_);
}
inline const PROTOBUF_NAMESPACE_ID::Timestamp& DocumentDelete::read_time() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentDelete.read_time)
  return _internal_read_time();
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* DocumentDelete::release_read_time() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentDelete.read_time)
  
  PROTOBUF_NAMESPACE_ID::Timestamp* temp = read_time_;
  read_time_ = nullptr;
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* DocumentDelete::_internal_mutable_read_time() {
  
  if (read_time_ == nullptr) {
    auto* p = CreateMaybeMessage<PROTOBUF_NAMESPACE_ID::Timestamp>(GetArenaNoVirtual());
    read_time_ = p;
  }
  return read_time_;
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* DocumentDelete::mutable_read_time() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentDelete.read_time)
  return _internal_mutable_read_time();
}
inline void DocumentDelete::set_allocated_read_time(PROTOBUF_NAMESPACE_ID::Timestamp* read_time) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(read_time_);
  }
  if (read_time) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(read_time)->GetArena();
    if (message_arena != submessage_arena) {
      read_time = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, read_time, submessage_arena);
    }
    
  } else {
    
  }
  read_time_ = read_time;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.DocumentDelete.read_time)
}

// -------------------------------------------------------------------

// DocumentRemove

// string document = 1;
inline void DocumentRemove::clear_document() {
  document_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline const std::string& DocumentRemove::document() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentRemove.document)
  return _internal_document();
}
inline void DocumentRemove::set_document(const std::string& value) {
  _internal_set_document(value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentRemove.document)
}
inline std::string* DocumentRemove::mutable_document() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentRemove.document)
  return _internal_mutable_document();
}
inline const std::string& DocumentRemove::_internal_document() const {
  return document_.GetNoArena();
}
inline void DocumentRemove::_internal_set_document(const std::string& value) {
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
}
inline void DocumentRemove::set_document(std::string&& value) {
  
  document_.SetNoArena(
    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
  // @@protoc_insertion_point(field_set_rvalue:google.firestore.v1.DocumentRemove.document)
}
inline void DocumentRemove::set_document(const char* value) {
  GOOGLE_DCHECK(value != nullptr);
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
  // @@protoc_insertion_point(field_set_char:google.firestore.v1.DocumentRemove.document)
}
inline void DocumentRemove::set_document(const char* value, size_t size) {
  
  document_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
      ::std::string(reinterpret_cast<const char*>(value), size));
  // @@protoc_insertion_point(field_set_pointer:google.firestore.v1.DocumentRemove.document)
}
inline std::string* DocumentRemove::_internal_mutable_document() {
  
  return document_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline std::string* DocumentRemove::release_document() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentRemove.document)
  
  return document_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
}
inline void DocumentRemove::set_allocated_document(std::string* document) {
  if (document != nullptr) {
    
  } else {
    
  }
  document_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), document);
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.DocumentRemove.document)
}

// repeated int32 removed_target_ids = 2;
inline int DocumentRemove::_internal_removed_target_ids_size() const {
  return removed_target_ids_.size();
}
inline int DocumentRemove::removed_target_ids_size() const {
  return _internal_removed_target_ids_size();
}
inline void DocumentRemove::clear_removed_target_ids() {
  removed_target_ids_.Clear();
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DocumentRemove::_internal_removed_target_ids(int index) const {
  return removed_target_ids_.Get(index);
}
inline ::PROTOBUF_NAMESPACE_ID::int32 DocumentRemove::removed_target_ids(int index) const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentRemove.removed_target_ids)
  return _internal_removed_target_ids(index);
}
inline void DocumentRemove::set_removed_target_ids(int index, ::PROTOBUF_NAMESPACE_ID::int32 value) {
  removed_target_ids_.Set(index, value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.DocumentRemove.removed_target_ids)
}
inline void DocumentRemove::_internal_add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value) {
  removed_target_ids_.Add(value);
}
inline void DocumentRemove::add_removed_target_ids(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_add_removed_target_ids(value);
  // @@protoc_insertion_point(field_add:google.firestore.v1.DocumentRemove.removed_target_ids)
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DocumentRemove::_internal_removed_target_ids() const {
  return removed_target_ids_;
}
inline const ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >&
DocumentRemove::removed_target_ids() const {
  // @@protoc_insertion_point(field_list:google.firestore.v1.DocumentRemove.removed_target_ids)
  return _internal_removed_target_ids();
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DocumentRemove::_internal_mutable_removed_target_ids() {
  return &removed_target_ids_;
}
inline ::PROTOBUF_NAMESPACE_ID::RepeatedField< ::PROTOBUF_NAMESPACE_ID::int32 >*
DocumentRemove::mutable_removed_target_ids() {
  // @@protoc_insertion_point(field_mutable_list:google.firestore.v1.DocumentRemove.removed_target_ids)
  return _internal_mutable_removed_target_ids();
}

// .google.protobuf.Timestamp read_time = 4;
inline bool DocumentRemove::_internal_has_read_time() const {
  return this != internal_default_instance() && read_time_ != nullptr;
}
inline bool DocumentRemove::has_read_time() const {
  return _internal_has_read_time();
}
inline const PROTOBUF_NAMESPACE_ID::Timestamp& DocumentRemove::_internal_read_time() const {
  const PROTOBUF_NAMESPACE_ID::Timestamp* p = read_time_;
  return p != nullptr ? *p : *reinterpret_cast<const PROTOBUF_NAMESPACE_ID::Timestamp*>(
      &PROTOBUF_NAMESPACE_ID::_Timestamp_default_instance_);
}
inline const PROTOBUF_NAMESPACE_ID::Timestamp& DocumentRemove::read_time() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.DocumentRemove.read_time)
  return _internal_read_time();
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* DocumentRemove::release_read_time() {
  // @@protoc_insertion_point(field_release:google.firestore.v1.DocumentRemove.read_time)
  
  PROTOBUF_NAMESPACE_ID::Timestamp* temp = read_time_;
  read_time_ = nullptr;
  return temp;
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* DocumentRemove::_internal_mutable_read_time() {
  
  if (read_time_ == nullptr) {
    auto* p = CreateMaybeMessage<PROTOBUF_NAMESPACE_ID::Timestamp>(GetArenaNoVirtual());
    read_time_ = p;
  }
  return read_time_;
}
inline PROTOBUF_NAMESPACE_ID::Timestamp* DocumentRemove::mutable_read_time() {
  // @@protoc_insertion_point(field_mutable:google.firestore.v1.DocumentRemove.read_time)
  return _internal_mutable_read_time();
}
inline void DocumentRemove::set_allocated_read_time(PROTOBUF_NAMESPACE_ID::Timestamp* read_time) {
  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
  if (message_arena == nullptr) {
    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(read_time_);
  }
  if (read_time) {
    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena =
      reinterpret_cast<::PROTOBUF_NAMESPACE_ID::MessageLite*>(read_time)->GetArena();
    if (message_arena != submessage_arena) {
      read_time = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
          message_arena, read_time, submessage_arena);
    }
    
  } else {
    
  }
  read_time_ = read_time;
  // @@protoc_insertion_point(field_set_allocated:google.firestore.v1.DocumentRemove.read_time)
}

// -------------------------------------------------------------------

// ExistenceFilter

// int32 target_id = 1;
inline void ExistenceFilter::clear_target_id() {
  target_id_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ExistenceFilter::_internal_target_id() const {
  return target_id_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ExistenceFilter::target_id() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.ExistenceFilter.target_id)
  return _internal_target_id();
}
inline void ExistenceFilter::_internal_set_target_id(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  target_id_ = value;
}
inline void ExistenceFilter::set_target_id(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_target_id(value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.ExistenceFilter.target_id)
}

// int32 count = 2;
inline void ExistenceFilter::clear_count() {
  count_ = 0;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ExistenceFilter::_internal_count() const {
  return count_;
}
inline ::PROTOBUF_NAMESPACE_ID::int32 ExistenceFilter::count() const {
  // @@protoc_insertion_point(field_get:google.firestore.v1.ExistenceFilter.count)
  return _internal_count();
}
inline void ExistenceFilter::_internal_set_count(::PROTOBUF_NAMESPACE_ID::int32 value) {
  
  count_ = value;
}
inline void ExistenceFilter::set_count(::PROTOBUF_NAMESPACE_ID::int32 value) {
  _internal_set_count(value);
  // @@protoc_insertion_point(field_set:google.firestore.v1.ExistenceFilter.count)
}

#ifdef __GNUC__
  #pragma GCC diagnostic pop
#endif  // __GNUC__
// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------

// -------------------------------------------------------------------


// @@protoc_insertion_point(namespace_scope)

}  // namespace v1
}  // namespace firestore
}  // namespace google

PROTOBUF_NAMESPACE_OPEN

template <> struct is_proto_enum< ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue> : ::std::true_type {};
template <>
inline const EnumDescriptor* GetEnumDescriptor< ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue>() {
  return ::google::firestore::v1::DocumentTransform_FieldTransform_ServerValue_descriptor();
}

PROTOBUF_NAMESPACE_CLOSE

// @@protoc_insertion_point(global_scope)

#include <google/protobuf/port_undef.inc>
#endif  // GOOGLE_PROTOBUF_INCLUDED_GOOGLE_PROTOBUF_INCLUDED_google_2ffirestore_2fv1_2fwrite_2eproto
